package w2

import (
	"database/sql"
	"errors"
)

var (
	ErrDatabase = errors.New("db can not use")
)

// 1. 我们在数据库操作的时候，比如 dao 层中当遇到一个 sql.ErrNoRows 的时候，是否应该 Wrap 这个 error，抛给上层。为什么，应该怎么做请写出代码？
// 要回答这个问题首先得知道 sql.ErrNoRows 是什么时候回被抛出来
// ErrNoRows is returned by Scan when QueryRow doesn't return a
// row. In such a case, QueryRow returns a placeholder *Row value that
// defers this error until a Scan.
// 我们知道这个是查不到的时候的，当查询空表的时候这个是会触发这个错误的
// 但是对于外部来说result都是大于0的，这里就可以直接在内部处理了
func GetMaxTest(dbc *sql.DB) (result int, err error) {
	if dbc == nil {
		return 0, ErrDatabase
	}
	dbd := dbc.QueryRow("select max(id) from test")
	if err = dbd.Scan(&result); err != nil {
		if err == sql.ErrNoRows {
			return result, nil
		}
	}
	return
}

func DatabaseConn() (*sql.DB, error) {
	return sql.Open("mysql", "mysql-dsn")
}
